package com.loveto.service;

import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;

import org.json.JSONException;
import org.json.JSONObject;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.os.Bundle;
import android.os.Handler;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.RelativeLayout;
import android.widget.TextView;

import com.loveto.common.JsonUtils;
import com.loveto.common.StringCheck;
import com.loveto.constant.LovetoConstant;

public class SetupLoginActivity extends BaseActivity implements
View.OnClickListener {
	
	// 사용하는 변수들
	private Intent intentMoveToPage;
	private ProgressDialog progressDialog;
	private AlertDialog.Builder myAlert;
	private Handler myHandler = new Handler();
	private String memberid;
	private String passwordPresent;
	private String passwordFirst;
	private String passwordSecond;
	private boolean isSaveSuccess;
	private String errorMsg;
	private String suspend_date;
	private String suspend_reason;
	private String phone_uid;
	
	
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.loveto_setup_login);
		
		//변수 초기화
		progressDialog = new ProgressDialog(this);
		myAlert = new AlertDialog.Builder(this);
		myAlert.setNeutralButton("확인", null);
		isSaveSuccess = false;
		
		//유저정보 받아오기
		SharedPreferences pref = getSharedPreferences("userInfo", Activity.MODE_PRIVATE);
		memberid = pref.getString("memberid", "");
		phone_uid = pref.getString("phone_uid", "");
		
		//클릭 리스너 달기
		((RelativeLayout)findViewById(R.id.btn_goto_back)).setOnClickListener(this);
		((TextView)findViewById(R.id.btn_change_password)).setOnClickListener(this);
		((TextView)findViewById(R.id.btn_logout)).setOnClickListener(this);
		
	}

	@Override
	public void onClick(View v) {
		switch (v.getId()) {
			case R.id.btn_change_password:
				if (isNetworkAvailableAndNotice())
				changePassword();
				break;
			case R.id.btn_logout:
				showAlertLogout();
				break;
			case R.id.btn_goto_back:
				finish();
				break;
		}
	}
	
	private void changePassword() {
		//에딧 택스트에서 값 받아오기
		passwordPresent = ((EditText)findViewById(R.id.inputPasswordPresent)).getText().toString();
		passwordFirst = ((EditText)findViewById(R.id.inputPasswordFirst)).getText().toString();
		passwordSecond = ((EditText)findViewById(R.id.inputPasswordSecond)).getText().toString();
		
		//입력을 했는지 확인
		if ("".equals(passwordPresent)) {
			myAlert.setMessage("현재 비밀번호를 입력해주세요.").show();
			return;
		} else if ("".equals(passwordFirst)) {
			myAlert.setMessage("신규 비밀번호를 입력해주세요.").show();
			return;
		} else if ("".equals(passwordSecond)) {
			myAlert.setMessage("신규 비밀번호 재입력을 입력해주세요.").show();
			return;
		}
		//재입력이 다른 경우
		if (!passwordFirst.equals(passwordSecond)) {
			myAlert.setMessage("신규 비밀번호의 첫입력과 재입력이 서로 다릅니다.").show();
			return;
		}
		//현재 비밀번호와 신규 입력이 같을 경우
		if (passwordFirst.equals(passwordPresent)) {
			myAlert.setMessage("신규 비밀번호는 기존 비밀번호와 달라야합니다.").show();
			return;
		}
		// 비밀번호 글자 길이에 대한 판단
		if (passwordFirst.length() < 4) {
			myAlert.setMessage("비밀번호는 4글자 이상이어야합니다.").show();
			return;
		} else if (passwordFirst.length() > 12) {
			myAlert.setMessage("비밀번호는 최대 12글자입니다.").show();
			return;
		}
		// 비밀번호 공백 여부 판단
		if (StringCheck.checkBlank(passwordFirst)) {
			myAlert.setMessage("비밀번호는 공백이있으면 안됩니다.").show();
			return;
		}
		//비밀번호 한글 포함 여부
		if	 (!StringCheck.checkCorrectPassword(passwordFirst)) {
			myAlert.setMessage("비밀번호는 영문과 특수문자만 사용해주세요.").show();
			return;
		}
		
		progressDialog.setMessage("정보를 저장하고 있습니다.");
		progressDialog.show();
		
		Runnable runnable = new Runnable(){
			@Override
			public void run() {
				//UI 를 건들기 때문에 핸들러 사용.
				myHandler.post(new Runnable() {
					@Override
					public void run() {
						Log.d("tag", "changePassword start");
						try {
							//서버에 정보 보내기
							StringBuffer sb = new StringBuffer(LovetoConstant.SETUP_LOGIN_CHANGE_PASSWORD);
							sb.append("?memberid=").append(memberid);
							sb.append("&passwordPresent=").append(URLEncoder.encode(passwordPresent, "UTF-8"));
							sb.append("&passwordChange=").append(URLEncoder.encode(passwordFirst, "UTF-8"));
							sb.append("&phone_uid=").append(phone_uid);
							Log.d("tag", "url : " + sb.toString());
							String jsonText = JsonUtils.getStringFromUrl(sb.toString());
							Log.d("tag", "jsonText : " + jsonText);
							//JSONArray jsonArray = new JSONArray(jsonText);
							JSONObject object = new JSONObject(jsonText);
							String result = object.getString("result");
							String err = object.getString("err");
							suspend_date = object.getString("suspend_date");
							suspend_reason = object.getString("suspend_reason");
							Log.d("tag", "result : " + result);
							Log.d("tag", "err : " + err);
							if ("T".equals(result)) {
								isSaveSuccess = true;
							} else {
								errorMsg = err;
							}
						} catch (JSONException e) {
							e.printStackTrace();
							Log.d("tag", "setRoundInfo() error, " + e.getMessage());
						} catch (UnsupportedEncodingException e) {
							e.printStackTrace();
							Log.d("tag", "setRoundInfo() error, " + e.getMessage());
						} finally {
							progressDialog.dismiss();
							Log.d("tag", "changePassword end");
							if (isSaveSuccess) {
								showAlertSuccess("비밀번호가 변경되었습니다.");
							} else if ("Incorrect PhoneID".equals(errorMsg)) {
								showAlertIncorrectPhoneID(SetupLoginActivity.this);
							} else if ("SuspendedID".equals(errorMsg)) {
								showAlertSuspendID(SetupLoginActivity.this, suspend_date, suspend_reason);
							} else if ("wrongPassword".equals(errorMsg)) {
								showAlertSuccess("현재 비밀번호를 잘못입력했습니다.");
							} else {
								showAlertSuccess("정보 변경에 실패했습니다. 다시 시도해주세요.");
							}
						}
					} //Handler run End
				});
			}
		};
		new Thread(runnable).start();
	}

    private void showAlertSuccess(String ment) {
    	new AlertDialog.Builder(this)
    	.setMessage(ment)
    	.setPositiveButton("확인", new DialogInterface.OnClickListener()
    	{
    		@Override
    		public void onClick(DialogInterface dialog, int which)
    		{
    			dialog.dismiss();
    			if (isSaveSuccess) {
    				finish();
    			}
    		}
    	})
    	.show();
    }
    
    private void showAlertLogout() {
    	new AlertDialog.Builder(this)
    	.setMessage("현재 계정을 로그아웃 하시겠습니까?")
    	.setPositiveButton("로그아웃", new DialogInterface.OnClickListener()
    	{
    		@Override
    		public void onClick(DialogInterface dialog, int which)
    		{
    			//현재 유저정보 삭제
    			SharedPreferences pref = getSharedPreferences("userInfo", Activity.MODE_PRIVATE);
    			Editor editor = pref.edit();
    			editor.clear();
    			editor.commit();
    			dialog.dismiss();
    			showAlertGotoMain();
    		}
    	})
    	.setNegativeButton("취소", new DialogInterface.OnClickListener()
    	{
    		@Override
    		public void onClick(DialogInterface dialog, int which)
    		{
    			dialog.dismiss();
    			
    		}
    	})
    	.show();
    }
    
   private void showAlertGotoMain() {
	   	new AlertDialog.Builder(this)
	   	.setMessage("메인페이지로 이동합니다.")
	   	.setPositiveButton("확인", new DialogInterface.OnClickListener()
	   	{
	   		@Override
	   		public void onClick(DialogInterface dialog, int which)
	   		{
	   			dialog.dismiss();
	   			intentMoveToPage = new Intent(SetupLoginActivity.this,LovotoMainActivity.class);
	   			startActivity(intentMoveToPage);
	   		}
	   	})
	   	.show();
   }
}
